#include <stdio.h>
#include <stdlib.h>

int main()
{
    //申请堆上空间可能会失败，返回空值
    // int *p = (int*)malloc(4);
    // if(p==NULL)
    // {
    //     printf("malloc 申请空间失败！\n");
    //     return;
    // }
    // *p = 20;
    // printf("%d\n",*p);
    // free(p);//释放堆上内存
    

    //一维数组
    // int *p = (int*)malloc(sizeof(int)*10);
    // if(p == NULL)
    // {
    //     printf("malloc 申请空间失败！\n");
    //     return-1;
    // }
    // for(int i=0;i<10;i++)
    // {
    //     printf("%d",p[i]);
    // }
    // printf("\n");
    // free(p);




    //二维数组
    int **p=(int**)malloc(sizeof(int*)*2);
    if(p==NULL)
    {
        printf("malloc 申请空间失败！\n");
        return-1;
    }
    for(int i=0;i<2;i++)
    {
        p[i]=(int*)malloc(sizeof(int)*3);
        if(p[i]==NULL)
        {
            printf("malloc 申请空间失败！\n");
            return-1;
        }
    }

for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
           p[i][j]=i*3+j+1;
        }
    }

    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            printf("%d ",p[i][j]);
        }
    printf("\n");
    }
    
    for(int i=0;i<2;i++)
    {
        free(p[i]);
    }
    free(p);
    return 0;
}
